package com.skt.domain.ENUM;

import com.baomidou.mybatisplus.annotation.IEnum;
import lombok.Getter;

/**
 * 租赁订单状态枚举
 * <p>
 * 对应数据库 rental_order 表的 status 字段：
 * 1 - 待支付，2 - 已支付，3 - 已取货，4 - 已归还，5 - 已取消
 */
@Getter
public enum RentalOrderStatus implements IEnum<Integer> {

    PENDING_PAYMENT(1, "待支付"),
    PAID(2, "已支付"),
    PICKED_UP(3, "已取货"),
    RETURNED(4, "已归还"),
    CANCELLED(5, "已取消");

    private final int code;
    private final String description;

    RentalOrderStatus(int code, String description) {
        this.code = code;
        this.description = description;
    }

    @Override
    public Integer getValue() {
        return this.code;
    }

    /**
     * 根据状态码获取描述（用于 VO 转换）
     *
     * @param code 状态码（可为 null）
     * @return 对应中文描述，若无效则返回 "未知状态"
     */
    public static String getDescByCode(Integer code) {
        if (code == null) {
            return "未知状态";
        }
        for (RentalOrderStatus status : values()) {
            if (status.code == code) {
                return status.description;
            }
        }
        return "无效状态";
    }

    /**
     * 根据状态码获取枚举（用于业务判断）
     */
    public static RentalOrderStatus fromCode(int code) {
        for (RentalOrderStatus status : values()) {
            if (status.code == code) {
                return status;
            }
        }
        throw new IllegalArgumentException("无效的租赁订单状态码: " + code);
    }
}